#define _CRT_SECURE_NO_WARNINGS 1

//#include<iostream>
//#include<string>
//#include<stack>
//
//using namespace std;
//
//stack<double> st;
//
//double Pow10(int k)
//{
//	int ret = 1;
//	while (k--)
//	{
//		ret *= 10;
//	}
//	return ret;
//}
//
//void calculate(char ch)
//{
//	double left, right;
//	right = st.top();
//	st.pop();
//	left = st.top();
//	st.pop();
//	if (ch == '+')
//		st.push(left + right);
//	else if (ch == '-')
//		st.push(left - right);
//	else if (ch == '*')
//		st.push(left * right);	
//	else
//		st.push(left / right);
//}
//
//int main()
//{
//	string s;
//	double t = 0;
//	int k = 0,flag = 0;
//	getline(cin,s);
//	for (int i = 0; i < s.size(); i++)
//	{
//		if (s[i] >= '0' && s[i] <= '9')
//		{
//			while (i < s.size() && ((s[i] >= '0' && s[i] <= '9') || s[i] == '.'))
//			{
//
//				if (s[i] == '.')
//				{
//					k = i;
//					flag = 1;
//				}
//				else t = t * 10 + (s[i] - '0');
//				i++;
//			}
//			if (flag)
//			{
//				double n = Pow10(i - k - 1);
//				st.push(t / n);
//				flag = 0;
//			}
//			else
//				st.push(t);
//			t = 0;
//			k = 0;
//		}
//		else if (i != s.size() - 1 && s[i] == '-' && s[i + 1] >= '0' && s[i + 1] <= '9')
//		{
//			i++;
//			while (i < s.size() && ((s[i] >= '0' && s[i] <= '9') || s[i] == '.'))
//			{
//				if (s[i] == '.')
//				{
//					k = i;
//					flag = 1;
//				}
//				else t = t * 10 + (s[i] - '0');
//				i++;
//			}
//			if (flag)
//			{
//				double n = Pow10(i - k - 1);
//				st.push(-t / n);
//				flag = 0;
//			}
//			else
//				st.push(-t);
//			t = 0;
//			k = 0;
//		}
//		else if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/')calculate(s[i]);
//		else;
//	}
//
//	printf("%.1f\n", st.top());
//
//	return 0;
//}

//
//#include<iostream>
//#include<queue>
//#include<string>
//
//using namespace std;
//
//int main()
//{
//	string s;
//	cin >> s;
//	queue<string> q1;
//	queue<string> q2;
//	int w11 = 0, l11 = 0, w21 = 0, l21 = 0;
//	while(1)
//	{
//		for (int i = 0; i < s.size(); i++)
//		{
//			if (s[i] == 'W')
//			{
//				w11++;
//				w21++;
//			}
//			else if (s[i] == 'L')
//			{
//				l11++;
//				l21++;
//			}
//			else if (s[i] == 'E')
//				goto end;
//			else;
//			if (w11 >= 11 || l11 >= 11)
//			{
//				if(abs(w11-l11)>=2)
//				{
//					string tmp = to_string(w11) + ":" + to_string(l11);
//					q1.push(tmp);
//					w11 = 0;
//					l11 = 0;
//				}
//			}
//			if (w21 >= 21 || l21 >= 21)
//			{
//				if (abs(w21 - l21) >= 2)
//				{
//					string tmp = to_string(w21) + ":" + to_string(l21);
//					q2.push(tmp);
//					w21 = 0;
//					l21 = 0;
//				}
//			}
//		}
//		cin >> s;
//	}
//end:
//
//	string tmp = to_string(w11) + ":" + to_string(l11);
//	q1.push(tmp);
//	tmp = to_string(w21) + ":" + to_string(l21);
//	q2.push(tmp);
//
//	while (!q1.empty())
//	{
//		cout << q1.front() << endl;
//		q1.pop();
//	}
//
//	cout << endl;
//	while (!q2.empty())
//	{
//		cout << q2.front() << endl;
//		q2.pop();
//	}
//
//	return 0;
//}


//#include<iostream>
//#include<queue>
//#include<vector>
//
//using namespace std;
//
//int check[1001] = { 0 };
//
//int main()
//{
//	queue<int> seq;
//	vector<int> arr;
//	int M, N;
//	cin >> M >> N;
//	int in = 0,prev = 0,count = 0,ret = 0;
//	while (N--)
//	{
//		cin >> in;
//		arr.push_back(in);
//	}
//	//sort(arr.begin(), arr.end());
//
//	for(auto n:arr)
//	{
//		if (!check[n])
//		{
//			if (count == M)
//			{
//				count--;
//				check[seq.front()] = 0;
//				seq.pop();
//			}
//			check[n] = 1;
//			count++;
//			seq.push(n);
//			ret++;
//		}
//	}
//	cout << ret << endl;;
//
//	return 0;
//}

//
//#include<iostream>
//#include<vector>
//#include<queue>
//
//using namespace std;
//
//int main()
//{
//	vector<int> arr;
//	queue<int> q;
//	int N, p;
//	int prevPos = 0;
//	cin >> N >> p;
//	for (int i = 1; i <= N; i++)
//	{
//		arr.push_back(i);
//	}
//
//	while (!arr.empty())
//	{
//		int k = (prevPos + p - 1) % arr.size();
//		q.push(arr[k]);
//		arr.erase(arr.begin() + k);
//		prevPos = k;
//	}
//
//	while (q.size() != 1)
//	{
//		cout << q.front() << " ";
//		q.pop();
//	}
//	cout << q.front() << endl;
//
//	return 0;
//}


#include<iostream>
#include<vector>
#include<stack>
#include<string>

using namespace std;

int n;
vector<string> path;
int map[11][11];
int check[11][11];
int dx[4] = { 0,1,0,-1 };
int dy[4] = { 1,0,-1,0 };

bool dfs(int i, int j)
{
	if (i == n - 2 && j == n - 2)
	{
		return true;
	}
	for (int k = 0; k < 4; k++)
	{
		int x = i + dx[k];
		int y = j + dy[k];
		if (x > 0 && x < n - 1 && y > 0 && y < n - 1 && !check[x][y] && map[x][y] == 0)
		{
				path.push_back("(" + to_string(x) + "," + to_string(y) + ")");
				check[x][y] = 1;
				if (dfs(x, y))
					return true;
				check[x][y] = 0;
				path.pop_back();
		}
	}
	return false;

}

int main()
{
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cin >> map[i][j];
		}
	}
	check[1][1] = 1;
	path.push_back("(1,1)");
	if (map[1][1] == 0 && dfs(1, 1))
	{
		for (auto s : path)
			cout << s;
	}
	else
	{
		cout << "NO" << endl;
	}


	return 0;
}